package projeto.tcc.ifrn.central.janine.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@Entity
@NamedQueries({ @NamedQuery(name = "produtorPorLogin", query = "select p from Produtor as p where p.usuario = :usuario") })
public class Produtor implements Serializable {

	public static final String BUSCAR_PRODUTOR_POR_LOGIN = "produtorPorLogin";
	/**
	 * 
	 */
	private static final long serialVersionUID = 5321352231872164300L;
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;
	private String conta;
	private String nomeTitular;
	private String agencia;
	private String op;
	private String numeroBanco;
	private double cpf;
	private String nomeProdutora;

	@OneToOne(cascade = { CascadeType.REMOVE })
	private Usuario usuario;

	@OneToMany(mappedBy = "produtor", cascade = { CascadeType.REMOVE })
	private List<Evento> eventos;

	public String getConta() {
		return conta;
	}

	public void setConta(String conta) {
		this.conta = conta;
	}

	public String getNomeTitular() {
		return nomeTitular;
	}

	public void setNomeTitular(String nomeTitular) {
		this.nomeTitular = nomeTitular;
	}

	public String getAgencia() {
		return agencia;
	}

	public void setAgencia(String agencia) {
		this.agencia = agencia;
	}

	public String getOp() {
		return op;
	}

	public void setOp(String op) {
		this.op = op;
	}

	public String getNumeroBanco() {
		return numeroBanco;
	}

	public void setNumeroBanco(String numeroBanco) {
		this.numeroBanco = numeroBanco;
	}

	public double getCpf() {
		return cpf;
	}

	public void setCpf(double cpf) {
		this.cpf = cpf;
	}

	public String getNomeProdutora() {
		return nomeProdutora;
	}

	public void setNomeProdutora(String nomeProdutora) {
		this.nomeProdutora = nomeProdutora;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public int getId() {
		return id;
	}

	public List<Evento> getEventos() {
		return eventos;
	}

	public void setEventos(List<Evento> eventos) {
		this.eventos = eventos;
	}

	public void setId(int id) {
		this.id = id;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((agencia == null) ? 0 : agencia.hashCode());
		result = prime * result + ((conta == null) ? 0 : conta.hashCode());
		long temp;
		temp = Double.doubleToLongBits(cpf);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result + id;
		result = prime * result
				+ ((nomeProdutora == null) ? 0 : nomeProdutora.hashCode());
		result = prime * result
				+ ((nomeTitular == null) ? 0 : nomeTitular.hashCode());
		result = prime * result
				+ ((numeroBanco == null) ? 0 : numeroBanco.hashCode());
		result = prime * result + ((op == null) ? 0 : op.hashCode());
		result = prime * result + ((usuario == null) ? 0 : usuario.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Produtor other = (Produtor) obj;
		if (agencia == null) {
			if (other.agencia != null)
				return false;
		} else if (!agencia.equals(other.agencia))
			return false;
		if (conta == null) {
			if (other.conta != null)
				return false;
		} else if (!conta.equals(other.conta))
			return false;
		if (Double.doubleToLongBits(cpf) != Double.doubleToLongBits(other.cpf))
			return false;
		if (id != other.id)
			return false;
		if (nomeProdutora == null) {
			if (other.nomeProdutora != null)
				return false;
		} else if (!nomeProdutora.equals(other.nomeProdutora))
			return false;
		if (nomeTitular == null) {
			if (other.nomeTitular != null)
				return false;
		} else if (!nomeTitular.equals(other.nomeTitular))
			return false;
		if (numeroBanco == null) {
			if (other.numeroBanco != null)
				return false;
		} else if (!numeroBanco.equals(other.numeroBanco))
			return false;
		if (op == null) {
			if (other.op != null)
				return false;
		} else if (!op.equals(other.op))
			return false;
		if (usuario == null) {
			if (other.usuario != null)
				return false;
		} else if (!usuario.equals(other.usuario))
			return false;
		return true;
	}

}
